package com.ruoyi.customer.service;

import com.ruoyi.customer.api.domain.CustomerManagement;
import com.ruoyi.customer.api.domain.WxLoginBody;
import com.ruoyi.customer.domain.PersonalInfo;

import java.util.List;

/**
 * 客户管理Service接口
 * 
 * @author ruoyi
 * @date 2024-09-03
 */
public interface ICustomerManagementService 
{
    /**
     * 查询客户管理
     * 
     * @param id 客户管理主键
     * @return 客户管理
     */
    public CustomerManagement selectCustomerManagementById(Long id);

    /**
     * 查询客户管理列表
     * 
     * @param customerManagement 客户管理
     * @return 客户管理集合
     */
    public List<CustomerManagement> selectCustomerManagementList(CustomerManagement customerManagement);

    /**
     * 新增客户管理
     * 
     * @param customerManagement 客户管理
     * @return 结果
     */
    public int insertCustomerManagement(CustomerManagement customerManagement);

    /**
     * 修改客户管理
     * 
     * @param customerManagement 客户管理
     * @return 结果
     */
    public int updateCustomerManagement(CustomerManagement customerManagement);

    /**
     * 批量删除客户管理
     * 
     * @param ids 需要删除的客户管理主键集合
     * @return 结果
     */
    public int deleteCustomerManagementByIds(Long[] ids);

    /**
     * 删除客户管理信息
     * 
     * @param id 客户管理主键
     * @return 结果
     */
    public int deleteCustomerManagementById(Long id);

    /**
     * 检查客户账号是否唯一
     * @param customerManagement
     * @return
     */
    boolean checkAccountUnique(CustomerManagement customerManagement);

    /**
     * 注册客户信息
     * @param customerManagement
     * @return
     */
    Boolean registerCustomer(CustomerManagement customerManagement);

    /**
     * 通过账号查询客户
     * @param account
     * @return
     */
    CustomerManagement selectCustomerByAccount(String account);

    /**
     * 修改客户基本信息
     * @param customerManagement
     * @return
     */
    Boolean updateCustomerProfile(CustomerManagement customerManagement);

    /**
     * 校验电话号码唯一性
     * @param currentUser
     * @return
     */
    boolean checkPhoneUnique(CustomerManagement currentUser);
    /**
     * 校验email是否唯一
     *
     * @param currentUser 用户信息
     * @return
     */
    boolean checkEmailUnique(CustomerManagement currentUser);

    boolean updateUserProfile(CustomerManagement currentUser);

    boolean updateCustomerAvatar(String account, String url);

    /**
     * 重置密码
     * @param account
     * @param newPassword
     * @return
     */
    int resetCustomerPwd(String account, String newPassword);

    /**
     * 修改用户状态
     *
     * @param customerManagement 用户信息
     * @return 结果
     */
    int updateCustomerStatus(CustomerManagement customerManagement);


    /**
     * 重置用户密码
     *
     * @param user 用户信息
     * @return 结果
     */
    int resetPwd(CustomerManagement user);

    /**
     * 微信登陆，获取用户信息
     * @param wxLoginBody
     * @return
     */
    CustomerManagement getCustomerInfoByOpenId(WxLoginBody wxLoginBody);

    List<CustomerManagement>  selectUnBindCustomerList(CustomerManagement customerManagement);

    PersonalInfo getPersonalInfo(Long id);

    CustomerManagement selectCustomerManagementByPhoneNumber(String phoneNumber);

    int setDefaultDept(Long deptId);
}
